#define _CRT_SECURE_NO_WARNINGS


//写一个函数，可以逆序一个字符串的内容。
//#include <stdio.h>
//#include <string.h>
//void reverse(char* p, int len);
//
//int main()
//{
//	char arr[10000] = { 0 };
//	gets(arr);
//	int len = strlen(arr);
//	reverse(arr,len);
//	return 0;
//}
//
//void reverse(char* p, int len)
//{
//	int i = 0;
//	for (i = len-1; i >= 0; i--)
//	{
//		printf("%c", *(p + i));
//	}
//}

//写一个函数打印arr数组的内容，不使用数组下标，使用指针。
//arr是一个整形一维数组。

//#include <stdio.h>
//
//void fun(int* p, int sz);
//
//int main()
//{
//	int arr[12] = { 1,2,3,4,5,6,7,8,9,10,11,12 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	fun(arr,sz);
//	return 0;
//}
//
//void fun(int* p, int sz)
//{
//	int i = 0;
//	for (i = 0; i < sz; i++)
//	{
//		printf("%d ", *(p + i));
//	}
//}

//实现一个对整形数组的冒泡排序
//#include <stdio.h>
//
//void fun(int arr[], int sz);
//
//int main()
//{
//	int arr[12] = { 7,8,9,10,11,12,1,2,3,4,5,6 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	fun(arr, sz);
//	int i = 0;
//	for (i = 0; i < sz ; i++)
//	{
//		printf("%d ", arr[i]);
//	}
//	return 0;
//}
//
//void fun(int arr[], int sz)
//{
//	int i = 0;
//	for (i = 0; i < sz - 1; i++)
//	{
//		int flag = 1;
//		int j = 0;
//		for (j = 0; j < sz -i- 1; j++)
//		{
//			if (arr[j] > arr[j + 1])
//			{
//				flag = 0;
//				int tmp = arr[j];
//				arr[j] = arr[j + 1];
//				arr[j + 1] = tmp;
//			}
//		}
//		if (flag == 1)
//			break;
//	}
//}


//实现一个函数，可以左旋字符串中的k个字符。

#include <stdio.h>
#include <string.h>

void Reverse(char* str, int left, int right) 
{
    while (left < right) 
    {
        char tmp = *(str + left);
        *(str + left) = *(str + right);
        *(str + right) = tmp;
        left++;
        right--;
    }
}

char* fun(char* str, int n) {

    int lens = strlen(str);
    if (lens == 0)
        return str;
    int times = n % lens;
    Reverse(str, 0, times - 1);
    Reverse(str, times, lens - 1);
    Reverse(str, 0, lens - 1);
    return str;
}

int main()
{
	char arr[10000] = { 0 };
	printf("输入字符串：\n");
	gets(arr);
    int len = strlen(arr);
	int n = 0;
	printf("想要左旋几个字符：\n");
	scanf("%d", &n);
	fun(arr,n);
	int i = 0;
	for (i = 0; i < len; i++)
	{
		printf("%c", arr[i]);
	}
	return 0;
}

//模拟实现库函数strlen
//#include <stdio.h>
//#include <assert.h>
//
//int my_strlen( const char* p)
//{
//	int count = 0;
//	assert(p);
//	while (*p)
//	{
//		count++;
//		p++;
//	}
//	return count;
//}
//int main()
//{
//	char arr[] = "abcdef";
//	int r = my_strlen(arr);
//	printf("%d", r);
//	return 0;
//}

//输入一个整数数组，实现一个函数，来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分，所有偶数位于数组的后半部分。
//#include <stdio.h>
//
//void fun(int arr[],int sz)
//{
//	int* left = arr;
//	int* right = arr + sz - 1;
//	while (left < right)
//	{
//		while (((left < right) && (*left) % 2 != 0))
//		{
//			left++;
//		}
//		while (((left < right) && (*right) % 2 == 0))
//		{
//			right--;
//		}
//		if (left < right)
//		{
//			int tmp = *left;
//			*left = *right;
//			*right = tmp;
//		}
//	}
//}
//
//int main()
//{
//	int arr[10] = {1,2,3,4,5,6,7,8,9,10};
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	fun(arr,sz);
//	int i = 0;
//	for (i = 0; i < sz; i++)
//	{
//		printf("%d  ", arr[i]);
//	}
//	return 0;
//}